Plánované spouštění úloh je klíčovým prvkem správy systému Linux, který umožňuje automatizovat opakující se úkoly v rámci systému.
at V Unixových operačních systémech, slouží příkaz at k naplánování příkazů, které se mají spustit najednou, v konkrétním čase v budoucnosti. Přesněji, čte série příkazů ze standardního vstupu a sbírá je do jednoho at-jobu a spustí je v nastaveném čase. Job dědí stávající prostředky, a tak je spuštěn ve stejÚvod
Cron je Unixový systémový nástroj (démon), který spouští různém pracovním adresáři a se stejnými parametry jako byl naplánován. S jistou mírou nepřesnosti jej lze chápat jako makro.
Obecné příklady použití:
$ at now + 15 min
at> ./skripty/uloha.sh
Ukončení (a aktivace) zkratkou Ctrl+D
Nebo i takto:
$ echo "./skripty/uloha.sh" | at now + 15 min
V obou případech spustí skript ./skripty/uloha.sh za 15 minut. Soubor musí být pochopitelně spustitelný (x).
atq a atrm atq slouží k výpisu naplánovaných úloh.atrm slouží ke zrušení úlohy.Příkaz batch řadí úlohy do fronty a předává je systému ke zpracování jednu po druhé v případě, že průměr zátěže systému je nižší než 0,8 násobek implicitního.
☝️ Je rozumné volit neobvyklé časy (např. 3:22, 7:17, 14:03) než časy „kulaté“ (např. 3:00, 7:00, 14:00). Ty jsou primárně „předurčené“ pro spouštění systémových úloh.
Cron je Unixový systémový nástroj (démon), který spouští různé programy v předem definovanou dobu a intervalu. Každý trošku vyspělejší server se bez nějwebový projekt se bez tohoto démona neobejde.
Démon cron používají převážně administrátoři ke spouštění programů a skriptů, které pomáhají udržovat operační systém nebo automatizovat opakující se činnosti. Například mazání pomocných souborů, synchronizace času, provádění pravidelného zálohování databází, archivaci adresářů nebo přesun souborů mezi servery. Možností je nepočítaně.
Výpis naplánovaných úloh zjistitíte příkazem uptime nebo jinými nástroji pro monitoring systému. Například výstup příkazu uptime může vypadat takto:
$ uptime
14:35:01 up 3:25, 3 users, load average: 0.08, 0.12, 0.15
Hodnoty za load average udávají průměrnou zátěž za:
0.08)0.12)0.15)Jak batch reaguje na zátěž:
Příkaz batch spustí úlohy pouze v případě, že zátěž systému je nižší než určité procento maximální kapacity (obvykle definováno jako 0.8 násobek počtu jader). Pokud je zátěž vyšší
# crontab -l
Úprava úloh se provádí příkazem
# crontab -e
Otevře soubor s úlohami ve výchozím textovém editoru. Pokud jste jej neměnili, pak nejspíše editoru nano.
Každý řádek definuje jednu úlohu pomocí šesti parametrů. Prvních 5 je čas, poslední je samotný příkaz. Pokud je spuštěných příkazů víc, úulohyogramy v předem definovanou dobu a intervalu. Každý trošku vyspělejší server se bez nějwebový projekt se nbezačnou zpracovávat, dokud zátěž neklesne pod tuto úroveň.
Cron je služba (démon), která spouští různé programy v předem definovanou dobu a intervalu tohoto démona neobejde.
Démon cron používají převážně administrátoři ke spouštění programů a skriptů, které pomáhají udržovat operační systém nebo automatizovat opakující se činnosti. Například mazání pomocných souborů, synchronizace času, provádění pravidelného zálohování databází, archivaci adresářů nebo přesun souborů mezi servery. Možností je bezpočet.
Nezaměňujte: "Cron" je systémový démon, který spouští plánované úlohy v určený čas, zatímco "crontab" je nástroj pro editaci, zobrazení a správu seznamu plánovanýchží se do souboru a jen se zde zavolá. Nejkratším intervalem cronu je 1 minuta, nejdelší 1 rok.
Do speciálního souboru crontab jednoduše stačí zapsat příkaz a čas spouštění.
Příkaz crontab -l vypíše obsah souboru -- přehled plánovaných úloh.
Příkaz crontab -e otevře ve výchozím editoru soubor, ve kterém bude seznam úloh (pokud takové jsou):
m h dom mon dow príkaz
+---------- minuty (0-59)
| +-------- hodiny (0-23)
| | +------ den v mesíci (1-31)
| | | +---- mesic (1-12) nebo jan,feb,mar...dec
| | | | +-- den týdne (0-6) (Ne=0 nebo 7) nebo mon,tue,wed...
| | | | |
* * * * * <príkaz nebo soubor se skriptem>
Prvních 5 je čas, poslední je samotný příkaz. Pokud je spuštěných příkazů víc, uloží se do skriptu a jen se zde spustí.
Pokud je místo některého z prvních pěti parametrů * (hvězdička), znamená to, že parametr není definován. Bílé znaky (mezery, tabulátory) se ignorují.
0 1 * * * prikaz ... každý den v 1:00 ráno
5 1 * * * prikaz ... denně v 1:05 ráno
0 0 1 * * prikaz ... každého 1. v měsíci
*/5 * * * * prikaz ... každých 5 minut (kratší zápis)
* */12 * 1-6,9-12 1-4 prikaz ... Po-Pá každých 12 hodin mimo prázdniny.
Prakticky lze nastavit jakýkoliv interval od 1 minuty do 1 roku.
Spuštěná naplánovaná úloha nemá přidělený terminál a tudíž nemá přidělen proud 1 (stdout) aniani stdout a stderr*). Je téměř povinností případný výstup, hlavně ten chybový nějak zpracovat zahazovat. A -- jak jinak, než přesměrováním do /dev/null:
... prikaz &> /dev/null
Pokud by se takto neošetřila, cron by případný stdout i stderr poslal na e-mail uživatele. Ty si jde přečíst příkazem mail.
Pokud chcete naplánovanou úlohu deaktivovat, není nutné řádek v crontabu mazat. Stačí jej zakomentovat znakem #. Časování této úlohy se vypne.
Existují i předdefinované časy pro snazší zápis:
@hourly
@daily
@monthly
@yearly
@reboot
Například:
@daily prikaz_1
@monthly prikaz_2
Alternativní možností jak naplánovat úlohu, spočívá v uložení souboru se skriptem do jednoho ze systémových adresářů (jako root). Máme na výběr ze čtyř předdefinovaných časů:
/etc/cron.daily
/etc/cron.hourly
/etc/cron.weekly
/etc/cron.monthly
Princip podmíněného spouštění v crontabu spočívá v použití shellových příkazů, které ověřují určité podmínky před samotným spuštěním úlohy. Podmínka je zapsána pomocí logických testů (např. [ -f /cesta/k/souboru ] pro kontrolu existence souboru) a v případě jejího splnění se provede zadaný příkaz.
Příklad:
[ podmínka ] && příkaz
[ podmínka ] .. testuje požadovanou vlastnost (např. existence souboru, nenulová velikost, právo zápisu…).&& .. pokud podmínka vrátí hodnotu 0 (True), provede se příkaz.příkaz .. skript, který se má spustit.Příklady:
[ -f ./spustit ] && ./skripty/uloha.sh
Spuštění, pokud soubor existuje
[ -s ./data.dat ] && ./skripty/analyza.sh
Spuštění, pokud soubor není prázdný
To umožňuje spouštět úlohy pouze za určitých podmínek, což zvyšuje úroveň automatizaceOnline generátory
Existuje několik šikovných online generátorů, kde si časovou periodu jednoduše "naklikáte", např.:
Sestavte řádek crontabu, který:
/root/zaloha.sh jedenkrát týdně, vždy v noci./root/skripty/aaa.sh každý pátek a sobotu ve 3:20 hod ráno./root/skripty/bbb.sh každý den 2×./root/skripty/ccc.sh každé pondělí a středu v 15:00 a 20:00 hodin.df -h >> /root/velikost jedenkrát měsíčně v 23:59 hodin.